package sysapi

import "go-caipu/pkg/services/dto"

type SysApi struct {
	Id               int64  `json:"id,string"`
	Category         int64  `json:"category,string"`
	CategoryName     string `gorm:"-"`
	Handle           string `json:"handle" gorm:"size:128;comment:handle"`
	Title            string `json:"title" gorm:"size:128;comment:标题"`
	Path             string `json:"path" gorm:"size:128;comment:地址"`
	Type             string `json:"type" gorm:"size:16;comment:接口类型"`
	Action           string `json:"action" gorm:"size:16;comment:请求类型"`
	Remark           string `gorm:"size:255;" json:"description"` //描述
	CreateUserString string `json:"createUserString" gorm:"-"`
	UpdateUserString string `json:"updateUserString" gorm:"-"`
	CreatedAt        string `json:"createTime"`
	UpdatedAt        string `json:"updatedTime"`
	dto.ControlBy
}

type GetSysApiPageCommand struct {
	dto.Pagination `search:"-"`
	Title          string   `form:"title"  search:"type:contains;column:title;table:sys_api" comment:"标题"`
	Category       string   `form:"category"  search:"-" comment:"分类"`
	Path           string   `form:"path"  search:"type:contains;column:path;table:sys_api" comment:"地址"`
	Action         string   `form:"action"  search:"type:exact;column:action;table:sys_api" comment:"类型"`
	Ids            []string `json:"ids" search:"type:in;column:id;table:sys_api" comment:"主键"`
}

func (m *GetSysApiPageCommand) GetNeedSearch() interface{} {
	return *m
}

// GetSysApiCommand 功能获取请求参数
type GetSysApiCommand struct {
	Id int `uri:"id"`
}
type RemoveSysApiCommand struct {
	Ids []int64 `json:"ids"`
	Id  int64   `uri:"id"`
}

func (r RemoveSysApiCommand) GetIds() []int64 {
	if r.Id > 0 {
		r.Ids = []int64{r.Id}
	}
	return r.Ids
}

type GetApiCategoriesCommand struct {
	Ids   []string `form:"ids"`
	IsApi bool     `form:"isApi"` // 是否返回接口的id和title
}

// ApiCategory 表示 API 分类
type ApiCategory struct {
	ID        int64          `json:"key,string"`
	Title     string         `json:"title"`
	ParentID  int64          `json:"parentId,string"`
	Children  []*ApiCategory `json:"children"`      // 用于存储子分类，不映射到数据库
	Type      int            `json:"type"`          //用于菜单的【接口设置】判断为接口：1 还是菜单
	APIs      []*Apis        `json:"apis" gorm:"-"` // 用于存储该分类下的 API(设置菜单属于的接口时使用）
	SysApis   []*SysApi      `json:"sysApi" gorm:"-" comment:"导出接口给插件使用带完整的接口信息"`
	CreatedAt string         `json:"-"`
	UpdatedAt string         `json:"-"`
	OperUser  int64          `json:"-"`
}
type Apis struct {
	ID    int64  `json:"key,string"`
	Title string `json:"title"`
}
type RemoveSysApiCategoryCommand struct {
	Id int64 `uri:"id"`
}
